﻿using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Data;
using System.Windows.Forms;

namespace Gerencial_Fisio_Nutry.Banco
{
    public class MetodoBanco
    {
        Banco banco;
        public int carregarCodFuncionarioById(string id)
        {
            banco = new Banco();
            try
            {
                return Convert.ToInt16( banco.executaQueryRetornaDataTable
                    ("select cod_funcionario from funcionario f where idLogin = '" + id+"'").Rows[0].ItemArray.GetValue(0));
            }
            catch (Exception e)
            {
                MessageBox.Show("A Classe Banco.MetodoBanco \nMetodo carregarCodFuncionarioById \nid : "
               + id + " \nExecutou a mensagem : " + e.Message);
                return -1;
            }

        }
        public string carregarNomeFuncionario(int codFuncionario)
        {
            banco = new Banco();
            try
            {
                return banco.executaQueryRetornaDataTable
                    ("select p.nome from funcionario f inner join pessoa p on (p.cod_pessoa = f.cod_pessoa)"
                    + " where f.cod_funcionario = " + codFuncionario).Rows[0].ItemArray.GetValue(0).ToString();
            }
            catch (Exception e)
            {
                MessageBox.Show("A Classe Banco.MetodoBanco \nMetodo carregarNomeFuncionario \ncodFUncionario : "
               + codFuncionario + " \nExecutou a mensagem : " + e.Message);
                return "erro";
            }

        }
        public bool validarFuncionario(string idFuncionario, string senha)
        {
            banco = new Banco();
            try
            {
                string query = "select count(*)>0 as resposta from funcionario where idLogin = '"
                    + idFuncionario + "' and senha =  '" + senha + "'";
                return  Convert.ToBoolean( banco.executaQueryRetornaDataTable
                    (query) .Rows[0].ItemArray.GetValue(0));
            }

            catch (Exception e)
            {
                MessageBox.Show("A Classe Banco.MetodoBanco \nMetodo carregarNomeFuncionario \nidFUncionario : "
               + idFuncionario + " \n"               +"Executou a mensagem : " + e.Message);
                return false;
            }            
        }
        public double estoqueDoProduto(int cod_produto)
        {
            banco = new Banco();
            try
            {
                    return Convert.ToDouble(banco.executaQueryRetornaDataTable
                    ("select estoque("+cod_produto+")")  .Rows[0].ItemArray.GetValue(0));
            }
            catch (Exception e)
            {
                MessageBox.Show("A Classe Banco.MetodoBanco \nMetodo estoqueDoProduto \ncod_produto : "
               + cod_produto + " \nExecutou a mensagem : " + e.Message);
                return -1;
            }
        }        
        public Logica.Produto carregarProdutoByCodigo(int cod_produto)
        {
               banco = new Banco();
              Logica.Produto produto = new Logica.Produto();
            try
            {
                DataTable dtt = banco.executaQueryRetornaDataTable
                    ("select cod_segmento, descricao, referencia, precosaida, descontolimite, unidade, cfop, ncm "
                    +"from produto where cod_produto = "+cod_produto);
                produto.cod_Produto = cod_produto;
                produto.cod_segmento =  Convert.ToInt16( dtt.Rows[0].ItemArray.GetValue(0));
                produto.descricao = dtt.Rows[0].ItemArray.GetValue(1).ToString();
                produto.referencia = dtt.Rows[0].ItemArray.GetValue(2).ToString();
                produto.precoSaida = Convert.ToDouble(dtt.Rows[0].ItemArray.GetValue(3));
                produto.descontoLimite = Convert.ToDouble(dtt.Rows[0].ItemArray.GetValue(4));
                produto.unidade = dtt.Rows[0].ItemArray.GetValue(5).ToString();
                try
                {
                    produto.cod_entrada = int.Parse(banco.executaQueryRetornaDataTable
                        ("select entradaDoProduto(" + cod_produto + ")").Rows[0].ItemArray.GetValue(0).ToString());
                    produto.quantidadeAtualEstoque = double.Parse(banco.executaQueryRetornaDataTable
                        ("select estoque(" + cod_produto + ")").Rows[0].ItemArray.GetValue(0).ToString());
                }
                catch {
                    produto.cod_entrada = -1;
                    produto.quantidadeAtualEstoque = 0;
                }
                produto.quantidadeComprada = 1;
                produto.descontoAplicado = 0;
                produto.CFOP = Convert.ToInt16( dtt.Rows[0].ItemArray.GetValue(6).ToString());
                produto.NCM = dtt.Rows[0].ItemArray.GetValue(7).ToString();
                //  produto.cod_entrada =  
            }
            catch (Exception e)
            {
                MessageBox.Show("A Classe Banco.MetodoBanco \nMetodo carregarProdutoByCodigo \ncod_produto : "
               + cod_produto + " \nExecutou a mensagem : " + e.Message);
                return null;
            }
            return produto;
        } 
        public bool existeProduto(int cod_produto)
        {
            banco = new Banco();
            try
            {
                string query = "select count(*)>0 as resposta from produto where cod_produto = "
             +        cod_produto;
                bool reposta = Convert.ToBoolean(banco.executaQueryRetornaDataTable
                    (query) .Rows[0].ItemArray.GetValue(0));
                return reposta;
            }

            catch (Exception e)
            {
                MessageBox.Show("A Classe Banco.MetodoBanco \nMetodo existeProduto \ncodProduto : "
               + cod_produto + " \n" + "Executou a mensagem : " + e.Message);
                return false;
            }
        }
        public bool existeProduto(string referencia)
        {
            banco = new Banco();
            try
            {
                string query = "select count(*)>0 as resposta from produto where referencia = '"
             + referencia+"'";
                bool reposta = Convert.ToBoolean(banco.executaQueryRetornaDataTable
                    (query).Rows[0].ItemArray.GetValue(0));
                return reposta;
            }

            catch (Exception e)
            {
                MessageBox.Show("A Classe Banco.MetodoBanco \nMetodo existeProduto \ncodProduto : "
               + referencia + " \n" + "Executou a mensagem : " + e.Message);
                return false;
            }
        }
        public  Logica.Estoque [] estoqueDoItem(int cod_produto)
        {
            banco = new Banco();
            Logica.Estoque [] estoque;
            
            string query = "select e.cod_entrada,e.quantidadeEstoque "
                +"from produto p inner join entrada e on (p.cod_produto = e.cod_produto) "
                +" where p.cod_produto = "+ cod_produto;

            DataTable dtt = banco.executaQueryRetornaDataTable(query);
            estoque = new Logica.Estoque[dtt.Rows.Count];
            for(int i = 0; i < dtt.Rows.Count;i++)
            {
                estoque[i] = new Logica.Estoque();
                estoque[i].cod_entrada = Convert.ToInt16 (dtt.Rows[i].ItemArray.GetValue(0));
                estoque[i].cod_produto = cod_produto;
                estoque[i].quantidade = double.Parse(dtt.Rows[i].ItemArray.GetValue(1).ToString());
            }
            return estoque;
        }
        public Logica.Estoque[] estoqueDoItem2(int cod_produto)
        {
            banco = new Banco();
            Logica.Estoque[] estoque;

            string query = "select  e.cod_entrada, e.nnf,e.cod_produto, e.valorCompra, e.quantidadeEstoque, e.dataValidade,0 "
                + "from produto p inner join entrada e on (p.cod_produto = e.cod_produto) "
                + " where p.cod_produto = " + cod_produto + " and e.quantidadeEstoque > 0";

            DataTable dtt = banco.executaQueryRetornaDataTable(query);
            estoque = new Logica.Estoque[dtt.Rows.Count];
            for (int i = 0; i < dtt.Rows.Count; i++)
            {
                estoque[i] = new Logica.Estoque();
                estoque[i].cod_entrada = Convert.ToInt16(dtt.Rows[i].ItemArray.GetValue(0));
                estoque[i].cod_produto = cod_produto;
                estoque[i].quantidade = double.Parse(dtt.Rows[i].ItemArray.GetValue(4).ToString());
                estoque[i].valorCompra = double.Parse(dtt.Rows[i].ItemArray.GetValue(3).ToString());
                estoque[i].dataValidade = dtt.Rows[i].ItemArray.GetValue(3).ToString();
                estoque[i].nnf = Convert.ToInt16(dtt.Rows[i].ItemArray.GetValue(1));
                }
            return estoque;
        }
        public Logica.Produto carregarProdutoByReferencia(string referencia)
        {
            banco = new Banco();
            Logica.Produto produto = new Logica.Produto();
            try
            {
                DataTable dtt = banco.executaQueryRetornaDataTable
                    ("select cod_segmento, descricao, cod_produto, precosaida, descontolimite, unidade, cfop, ncm "
                    + "from produto where referencia = '" + referencia+"'");
                produto.referencia = referencia;
                produto.cod_segmento = Convert.ToInt16(dtt.Rows[0].ItemArray.GetValue(0));
                produto.descricao = dtt.Rows[0].ItemArray.GetValue(1).ToString();
                produto.cod_Produto = Convert.ToInt16( dtt.Rows[0].ItemArray.GetValue(2).ToString());
                produto.precoSaida = Convert.ToDouble(dtt.Rows[0].ItemArray.GetValue(3));
                produto.descontoLimite = Convert.ToDouble(dtt.Rows[0].ItemArray.GetValue(4));
                produto.unidade = dtt.Rows[0].ItemArray.GetValue(5).ToString();
                try
                {
                    produto.cod_entrada = int.Parse(banco.executaQueryRetornaDataTable
                        ("select entradaDoProduto(" + produto.cod_Produto + ")").Rows[0].ItemArray.GetValue(0).ToString());
                    produto.quantidadeAtualEstoque = double.Parse(banco.executaQueryRetornaDataTable
                        ("select estoque(" + produto.cod_Produto + ")").Rows[0].ItemArray.GetValue(0).ToString());
                }
                catch
                {
                    produto.cod_entrada = -1;
                    produto.quantidadeAtualEstoque = 0;
                }
                produto.quantidadeComprada = 1;
                produto.descontoAplicado = 0;
                produto.CFOP = Convert.ToInt16(dtt.Rows[0].ItemArray.GetValue(6).ToString());
                produto.NCM = dtt.Rows[0].ItemArray.GetValue(7).ToString();
                //  produto.cod_entrada =  
            }
            catch (Exception e)
            {
                MessageBox.Show("A Classe Banco.MetodoBanco \nMetodo carregarProdutoByReferencia \nReferencia : "
               + referencia + " \nExecutou a mensagem : " + e.Message);
                return null;
            }
            return produto;
        }
        public DataTable conjuntoDePessoas(bool isCliente)
        {
            banco = new Banco();
            try
            {
                string tabela = "revendedor ";
                if (isCliente) tabela = "Cliente ";
                return banco.executaQueryRetornaDataTable
                    ("select to_char(p.cod_pessoa,'00000'), p.nome, (p.endereco||' , ' ||p.numero) as endereco from pessoa p "
                    + " inner join " + tabela + " a on(a.cod_pessoa = p.cod_pessoa) order by nome ");
            }

            catch (Exception e)
            {
                MessageBox.Show("A Classe Banco.MetodoBanco \nMetodo conjuntoDePessoas  : "
               + " \n" + "Executou a mensagem : " + e.Message);
                return null ;
            }
        }
        public DataTable conjuntoDePessoas()
        {
            banco = new Banco();
            try
            {
                return banco.executaQueryRetornaDataTable
                    ("select to_char(p.cod_pessoa,'00000'), p.nome, (p.endereco||' , ' ||p.numero) as endereco from pessoa p "
                    + " order by nome ");
            }

            catch (Exception e)
            {
                MessageBox.Show("A Classe Banco.MetodoBanco \nMetodo conjuntoDePessoas()  : "
               + " \n" + "Executou a mensagem : " + e.Message);
                return null;
            }
        }
        public Logica.Pessoa carregarPessoaByCodigo(int cod_pessoa)
        {
            try{
            Logica.Pessoa pessoa = new Logica.Pessoa();
            banco = new Banco();
           DataTable dtt =  banco.executaQueryRetornaDataTable
               ("select cod_pessoa, nome, endereco,numero,cidade, uf, cep, datacadastro, "+
                            " datanascimento, telefone, email, cpf , rg, url  from pessoa where cod_pessoa ="+cod_pessoa+" ;");
                pessoa.cod_pessoa = int.Parse( dtt.Rows[0].ItemArray.GetValue(0).ToString());
                 pessoa.nome = dtt.Rows[0].ItemArray.GetValue(1).ToString();
              pessoa.endereço = dtt.Rows[0].ItemArray.GetValue(2).ToString();
                pessoa.numero =""+ dtt.Rows[0].ItemArray.GetValue(3).ToString();
                pessoa.cidade = "" + dtt.Rows[0].ItemArray.GetValue(4).ToString();
                pessoa.UF = "" + dtt.Rows[0].ItemArray.GetValue(5).ToString();
                pessoa.cep = "" + dtt.Rows[0].ItemArray.GetValue(6).ToString();
                pessoa.dataCadastro = Convert.ToDateTime(dtt.Rows[0].ItemArray.GetValue(7));

                pessoa.telefone = "" + dtt.Rows[0].ItemArray.GetValue(9).ToString();
                pessoa.email = "" + dtt.Rows[0].ItemArray.GetValue(10).ToString();
                pessoa.cpf = "" + dtt.Rows[0].ItemArray.GetValue(11).ToString();
                pessoa.rg = "" + dtt.Rows[0].ItemArray.GetValue(12).ToString();

                pessoa.url = "" + dtt.Rows[0].ItemArray.GetValue(13).ToString();
                try
                {
                    pessoa.dataNascimento = Convert.ToDateTime(dtt.Rows[0].ItemArray.GetValue(8));
                }
                catch { pessoa.dataNascimento = pessoa.dataCadastro; }
            return pessoa;
            }
               catch (Exception e)
            {
                MessageBox.Show("A Classe Banco.MetodoBanco \nMetodo carregarPessoaByCodigo  : "
               + "cod_pessoa : "+cod_pessoa+" \n" + "Executou a mensagem : " + e.Message);
                return null ;
            }
        }
        public string tipoPagamentoByCodigo(int cod_pagamento)
        {
            try
            {
                banco = new Banco();
                banco.executaQueryRetornaDataTable("select descricao from tipopagamento where cod_tipoPagamento =" + cod_pagamento);
                return banco.executaQueryRetornaDataTable("select descricao from tipopagamento where cod_tipoPagamento =" + cod_pagamento).Rows[0].ItemArray.GetValue(0).ToString();
            }
            catch (Exception e)
            {
                MessageBox.Show("A Classe Banco.MetodoBanco \nMetodo tipoPagamentoByCodigo  : "
               + "cod_pagamento : " + cod_pagamento + " \n" + "Executou a mensagem : " + e.Message);
                return null;
            }
        }
        public string carregaSegmento(int cod_produto)
        {
            try {
                banco = new Banco();
            DataTable dtt = banco.executaQueryRetornaDataTable("select s.descricao "
                +"from segmento s inner join produto p on (p.cod_segmento  = s.cod_segmento ) where p.cod_produto = "+cod_produto);
            return  dtt.Rows[0].ItemArray.GetValue(0).ToString();

            }
            catch (Exception e)
            {
                MessageBox.Show("A Classe Banco.MetodoBanco \nMetodo carregaSegmento  : "
               + "cod_produto : " + cod_produto + " \n" + "Executou a mensagem : " + e.Message);
                return null;
            }
         
        }
        public int cod_segmentoByDescricao(string descricao)
        {
            try
            {
                banco = new Banco();
                DataTable dtt = banco.executaQueryRetornaDataTable("select cod_segmento from segmento where descricao = '"+ descricao+"'");
                return Convert.ToInt16( dtt.Rows[0].ItemArray.GetValue(0).ToString());

            }
            catch (Exception e)
            {
                MessageBox.Show("A Classe Banco.MetodoBanco \nMetodo cod_segmentoByDescricao  : "
               + "descricao : " + descricao + " \n" + "Executou a mensagem : " + e.Message);
                return 1;
            }
        }
        public bool isRevendedor(int cod_pessoa)
        {
              banco = new Banco();
              try
              {
                  string query = "select count(*)>0 as temRevendedor "
                      + "from pessoa p inner join revendedor r on (p.cod_pessoa = r.cod_pessoa) where p.cod_pessoa = " + cod_pessoa;
                  return  Convert.ToBoolean( banco.executaQueryRetornaDataTable(query).Rows[0].ItemArray.GetValue(0));
              }
              catch (Exception e)
              {
                  MessageBox.Show("A Classe Banco.MetodoBanco \nMetodo isRevendedor  : "
                 + "cod_pessoa : " + cod_pessoa + " \n" + "Executou a mensagem : " + e.Message);
                  return false;
              }
        }
        public bool isCliente(int cod_pessoa)
        {
            try
            {
                banco = new Banco();
                string query = "select count(*)>0 as temCliente "
                    + "from pessoa p  inner join cliente r on (p.cod_pessoa = r.cod_pessoa) where p.cod_pessoa = " + cod_pessoa;
                DataTable dtt = banco.executaQueryRetornaDataTable(query);
                bool retorno = Convert.ToBoolean( dtt.Rows[0].ItemArray.GetValue(0));
                return retorno;
            }
            catch (Exception e)
            {
                MessageBox.Show("A Classe Banco.MetodoBanco \nMetodo isCliente  : "
               + "cod_pessoa : " + cod_pessoa + " \n" + "Executou a mensagem : " + e.Message);
                return false;
            }

        }       
        public string [] todosSegmentos()
        {
            try
            {
                banco = new Banco();
                string query = "select s.descricao as segmento "
                                + "from  segmento s";
                DataTable dtt = banco.executaQueryRetornaDataTable(query);
                string[] segmentos = new string[dtt.Rows.Count];
                for (int i = 0; i < segmentos.Length;i++)
                    segmentos[i] = dtt.Rows[i].ItemArray.GetValue(0).ToString();

                return segmentos;
            }
            catch (Exception e)
            {
                MessageBox.Show("A Classe Banco.MetodoBanco \nMetodo todosSegmentos  : "
               + " \n" + "Executou a mensagem : " + e.Message);
                return new string [] {""};
            }
        }
        public DataTable todosProdutos()
        {
            try
            {
                banco = new Banco();
                string query = "select p.cod_produto,p.referencia ,p.descricao,s.descricao as segmento, p.precosaida as preco, "
                + "p.unidade, cfop, ncm  from produto p inner join segmento s on (s.cod_segmento = p.cod_segmento)"
                +"  where p.isativo = true order by p.descricao;";
                DataTable dtt = banco.executaQueryRetornaDataTable(query);
                return dtt;
            }
            catch (Exception e)
            {
                MessageBox.Show("A Classe Banco.MetodoBanco \nMetodo todosProdutos  : "
               + " \n" + "Executou a mensagem : " + e.Message);
                return new DataTable();
            }
        }
        public bool isProdutoDesativado(string referencia)
        {
            try
            {
                banco = new Banco();
                string query = "select referencia from produto where isativo = false;";
                DataTable dtt = banco.executaQueryRetornaDataTable(query);
                for(int i = 0; i < dtt.Rows.Count;i++)
                    if (referencia.Equals(dtt.Rows[i].ItemArray.GetValue(0).ToString()) )
                        return true;
                return false;
               
                
            }
            catch (Exception e)
            {
                MessageBox.Show("A Classe Banco.MetodoBanco \nMetodo isProdutoDesativado  : "
               + " \n" + "Executou a mensagem : " + e.Message);
                return false;
            }
        }
        public void desativarProduto(int cod_produto)
        {
            try
            {
                banco = new Banco();
                string query = "update produto set isativo = false where cod_produto = "+ cod_produto;
                banco.executaQuerySemRetorno(query);
                
            }
            catch (Exception e)
            {
                MessageBox.Show("A Classe Banco.MetodoBanco \nMetodo desativarProduto  : "
               + " \n" + "Executou a mensagem : " + e.Message);
           
            }
        }     
        public DataTable todosProdutos2()
        {
            try
            {
                banco = new Banco();
                string query = "select p.cod_produto,p.referencia ,p.descricao, p.precosaida as preco from produto p"
                + "  where p.isativo = true order by p.descricao;";
                DataTable dtt = banco.executaQueryRetornaDataTable(query);
                return dtt;
            }
            catch (Exception e)
            {
                MessageBox.Show("A Classe Banco.MetodoBanco \nMetodo todosProdutos  : "
               + " \n" + "Executou a mensagem : " + e.Message);
                return new DataTable();
            }
        }    
        public void cadastrarProduto(string referencia, string descricao, double precosaida, string unidade
            , int cod_segmento, double desconto, int CFOP, string NCM)
        {
            try{
                banco = new Banco();

            string query = "    INSERT INTO produto(cod_segmento, descricao, referencia, precosaida, descontolimite, unidade, cfop, ncm)"+
                " VALUES ( " + cod_segmento + ", '" + descricao + "',  '" + referencia + "', '" + precosaida.ToString().Replace(',', '.') +
                "',  " + desconto.ToString().Replace(',', '.') + ", '" + unidade + "',"+CFOP+" , '"+NCM+"')";


             banco.executaQuerySemRetorno(query);

            }
            catch (Exception e)
            {
                MessageBox.Show("A Classe Banco.MetodoBanco \nMetodo cadastrarProduto  : "
               + " \n" + "Executou a mensagem : " + e.Message);

            }
        }/*
        public void cadastrarProduto(int cod_produto, string referencia
            , string descricao, double precosaida, string unidade
           , int cod_segmento, double desconto, int CFOP, string NCM)
        {
            try
            {
                banco = new Banco();

                string query = "    INSERT INTO produto(cod_produto, cod_segmento, descricao, referencia, precosaida, descontolimite, unidade, cfop, ncm, cod_original)" +
                    " VALUES ("+cod_produto+", " + cod_segmento + ", '" + descricao + "',  '" + referencia + "', '" + precosaida.ToString().Replace(',', '.') +
                    "',  " + desconto.ToString().Replace(',', '.') + ", '" + unidade + "'," + CFOP + " , '" + NCM + "', "+cod_produto+")";


                banco.executaQuerySemRetorno(query);

            }
            catch (Exception e)
            {
                MessageBox.Show("A Classe Banco.MetodoBanco \nMetodo cadastrarProduto  : "
               + " \n" + "Executou a mensagem : " + e.Message);

            }
        }*/
        public void cadastrarProdutoByPacote(int cod_produto, string referencia, string descricao, double precosaida, string unidade
      , int cod_segmento, double desconto, int CFOP, string NCM, int codOriginal, double peso)
        {
            try
            {
                banco = new Banco();

                string query = "    INSERT INTO produto(cod_produto, cod_segmento, descricao, referencia, precosaida, descontolimite, unidade, cfop, ncm, cod_original, peso)" +
                    " VALUES ( " + cod_produto + ", " + cod_segmento + ", '" + descricao + "',  '" + referencia + "', '" + precosaida.ToString().Replace(',', '.') +
                    "',  " + desconto.ToString().Replace(',', '.') + ", '" + unidade + "'," + CFOP + " , '" + NCM + "', " + codOriginal + ",'" + peso.ToString().Replace(',', '.') + "')";


                banco.executaQuerySemRetorno(query);

            }
            catch (Exception e)
            {
                MessageBox.Show("A Classe Banco.MetodoBanco \nMetodo cadastrarProdutoByPacote  : "
               + " \n" + "Executou a mensagem : " + e.Message);

            }
        }
        public void cadastrarProduto(int cod_produto, string referencia, string descricao, double precosaida, string unidade
           , int cod_segmento, double desconto, int CFOP, string NCM, int cod_original)
        {
            try
            {
                banco = new Banco();

                string query = "    INSERT INTO produto(cod_produto, cod_segmento, descricao, referencia, precosaida, descontolimite, unidade, cfop, ncm, cod_original)" +
                    " VALUES ("+cod_produto+" ," + cod_segmento + ", '" + descricao + "',  '" + referencia + "', '" + precosaida.ToString().Replace(',', '.') +
                    "',  " + desconto.ToString().Replace(',', '.') + ", '" + unidade + "'," + CFOP + " , '" + NCM + "', "+cod_original+")";


                banco.executaQuerySemRetorno(query);

            }
            catch (Exception e)
            {
                MessageBox.Show("A Classe Banco.MetodoBanco \nMetodo cadastrarProduto  : "
               + " \n" + "Executou a mensagem : " + e.Message);

            }
        }
        public void ativarProduto(string referencia,string descricao , double precosaida, string unidade
            , int cod_segmento, double desconto )
        {
            //p.cod_produto,p.referencia ,p.descricao,s.descricao as segmento, p.precosaida as preco,
            try
            {
                banco = new Banco();
                string query = "update produto set isativo = true , descricao = '"
                    +descricao+"' ,precosaida  = "+precosaida.ToString().Replace(',','.')+
                    " ,unidade = '" + unidade + "'  ,cod_segmento = " + cod_segmento 
                    + " ,descontoLimite = " + desconto.ToString().Replace(',', '.')
                    +" where referencia = '" + referencia+"'";
                banco.executaQuerySemRetorno(query);

            }
            catch (Exception e)
            {
                MessageBox.Show("A Classe Banco.MetodoBanco \nMetodo ativarProduto  : "
               + " \n" + "Executou a mensagem : " + e.Message);

            }
        }
        public DataTable todosFornecedores()
        {
            try
            {
                banco = new Banco();
                string query = "select cod_fornecedor, cnpj, razao_social from fornecedor"; 
                DataTable dtt = banco.executaQueryRetornaDataTable(query);
                return dtt;
            }
            catch (Exception e)
            {
                MessageBox.Show("A Classe Banco.MetodoBanco \nMetodo todosFornecedores  : "
               + " \n" + "Executou a mensagem : " + e.Message);
                return new DataTable();
            }
        
        }
        public Logica.Fornecedor fornecedorByCodigo(int cod_fornecedor)
        {
            try
            {
                Logica.Fornecedor forn = new Logica.Fornecedor();
                banco = new Banco();
                string query = "select cod_fornecedor, cnpj, razao_social, email, endereco, bairro, cidade, "
                    +"estado, cep, numero, telefone, dataCadastro from fornecedor where cod_fornecedor ="
                    + cod_fornecedor;
                DataTable dtt = banco.executaQueryRetornaDataTable(query);
                forn.cod_fornecedor = cod_fornecedor;
                forn.cnpj = dtt.Rows[0].ItemArray.GetValue(1).ToString();
                forn.razao_social = dtt.Rows[0].ItemArray.GetValue(2).ToString();
                forn.email = dtt.Rows[0].ItemArray.GetValue(3).ToString();
                forn.endereco = dtt.Rows[0].ItemArray.GetValue(4).ToString();
                forn.bairro = dtt.Rows[0].ItemArray.GetValue(5).ToString();
                forn.cidade = dtt.Rows[0].ItemArray.GetValue(6).ToString();
                forn.estado = dtt.Rows[0].ItemArray.GetValue(7).ToString();
                forn.cep = dtt.Rows[0].ItemArray.GetValue(8).ToString();
                forn.numero = dtt.Rows[0].ItemArray.GetValue(9).ToString();
                forn.telefone = dtt.Rows[0].ItemArray.GetValue(10).ToString();
                forn.datacadastro = Convert.ToDateTime( dtt.Rows[0].ItemArray.GetValue(11).ToString());
                return forn;
            }
            catch (Exception e)
            {
                MessageBox.Show("A Classe Banco.MetodoBanco \nMetodo fornecedorByCodigo  : "
               + " \n" + "Executou a mensagem : " + e.Message);
                return null;
            }
         
            return null;
        }
       
        public void cadastrarSegmento(string descricao) {
            try
            {
                banco = new Banco();
                string q2 = "select count(*)>0 as temSegmento from segmento where descricao = '"+descricao+"'";
                DataTable dtt = banco.executaQueryRetornaDataTable(q2);
                string query = "INSERT INTO segmento(descricao)   VALUES ('" + descricao + "')";
                if(!Convert.ToBoolean( dtt.Rows[0].ItemArray.GetValue(0)))
                    banco.executaQuerySemRetorno(query);

            }
            catch (Exception e)
            {
                MessageBox.Show("A Classe Banco.MetodoBanco \nMetodo cadastrarSegmento  : "
               + " \n" + "Executou a mensagem : " + e.Message);

            }
        }
        public void alterarFornecedor(int cod_fornecedor, string cnpj, string razao_social
            , string email, string endereco, string bairro,
              string cidade, string estado, string cep, string numero, string telefone) {
            try{
                  banco = new Banco();
                  string query = "UPDATE fornecedor   SET  cnpj='" + cnpj + "', razao_social='" + razao_social 
                      + "', email='" + email + "', endereco='" + endereco + "', "
                    + " bairro='" + bairro + "', cidade = '" + cidade + "' , estado='" + estado + "', cep ='" + cep 
                    + "', numero='" + numero + "', telefone='" + telefone + "' "
                        +" WHERE cod_fornecedor = "+ cod_fornecedor;
                  banco.executaQuerySemRetorno(query);
            }
            catch (Exception e)
            {
                MessageBox.Show("A Classe Banco.MetodoBanco \nMetodo alterarFornecedor  : "
               + " \n" + "Executou a mensagem : " + e.Message);

            }
        
        }
        public DataTable produtosByReferencia(string referencia)
        {//select * from produto where CAST(cod_produto AS TEXT) like '%%'
            try
            {
                banco = new Banco();
                string query = "select cod_produto,  referencia, descricao, precoSaida,cfop, ncm, "
                    +"( select estoque( cod_produto)) as estoque from produto where referencia  like '%" + referencia + "%'";
                DataTable dtt = banco.executaQueryRetornaDataTable(query);
                return dtt;
            }
            catch (Exception e)
            {
                MessageBox.Show("A Classe Banco.MetodoBanco \nMetodo produtosByReferencia  : "
               + " \n" + "Executou a mensagem : " + e.Message);
                return new DataTable();
            }
        }
        public DataTable produtosByCodigo(string codigo)
        {//select * from produto where CAST(cod_produto AS TEXT) like '%%'
            try
            {
                banco = new Banco();
                string query = "select cod_produto,  referencia, descricao, precoSaida,cfop, ncm, "
                    + "( select estoque( cod_produto)) as estoque from produto where CAST(cod_produto AS TEXT)  like '%" + codigo + "%'";
                DataTable dtt = banco.executaQueryRetornaDataTable(query);
                return dtt;
            }
            catch (Exception e)
            {
                MessageBox.Show("A Classe Banco.MetodoBanco \nMetodo produtosByCodigo  : "
               + " \n" + "Executou a mensagem : " + e.Message);
                return new DataTable();
            }
        }
        public DataTable produtosByDescricao(string descricao)
        {
            try
            {
                banco = new Banco();
                string query = "select cod_produto,  referencia, descricao, precoSaida,cfop, ncm, "
                    +"( select estoque( cod_produto)) as estoque from produto where descricao  like '%" + descricao.ToUpper() + "%'";
                DataTable dtt = banco.executaQueryRetornaDataTable(query);
                return dtt;
            }
            catch (Exception e)
            {
                MessageBox.Show("A Classe Banco.MetodoBanco \nMetodo produtosByDescricao  : "
               + " \n" + "Executou a mensagem : " + e.Message);
                return new DataTable();
            }
        }
        public bool temNota(int nNF)
        {
            try
            {
                banco = new Banco();
                string query = "select count(*)>0 as temNota from notaEntrada where nnf = " + nNF;
             
                return Convert.ToBoolean(banco.executaQueryRetornaDataTable(query).Rows[0].ItemArray.GetValue(0));

            }
            catch (Exception e)
            {
                MessageBox.Show("A Classe Banco.MetodoBanco \nMetodo temNota  : "
               + " \n" + "Executou a mensagem : " + e.Message);
                return false;
            }
        }
        public bool temNota(int nNF, int cod_produto)
        {
            try
            {
                banco = new Banco();
                string query = "select count(e.nnf)>0 from notaentrada n inner join entrada e on(e.nnf = n.nnf) where n.nnf= "
                    +nNF+" and e.cod_produto ="+cod_produto ;

                return Convert.ToBoolean(banco.executaQueryRetornaDataTable(query).Rows[0].ItemArray.GetValue(0));

            }
            catch (Exception e)
            {
                MessageBox.Show("A Classe Banco.MetodoBanco \nMetodo temNota  : "
               + " \n" + "Executou a mensagem : " + e.Message);
                return false;
            }
        }
        //
        public bool temFornecedor(string CNPJ)
        {
            try
            {
                banco = new Banco();
                string query = "select count(*)>0 temFornecedor from fornecedor where cnpj = '"+CNPJ+"'";

                return Convert.ToBoolean(banco.executaQueryRetornaDataTable(query).Rows[0].ItemArray.GetValue(0));

            }
            catch (Exception e)
            {
                MessageBox.Show("A Classe Banco.MetodoBanco \nMetodo temCNPJ  : "
               + " \n" + "Executou a mensagem : " + e.Message);
                return false;
            }
        }
        public int cod_fornecedorByCNPJ(string CNPJ)
        {
            try
            {
                banco = new Banco();
                DataTable dtt = banco.executaQueryRetornaDataTable("select cod_fornecedor from fornecedor where cnpj =  '" + CNPJ + "'");
                return Convert.ToInt16(dtt.Rows[0].ItemArray.GetValue(0).ToString());
            }
            catch (Exception e)
            {
                MessageBox.Show("A Classe Banco.MetodoBanco \nMetodo cod_fornecedorByCNPJ  : "
               + "descricao : " + CNPJ + " \n" + "Executou a mensagem : " + e.Message);
                return 1;
            }
        }
        public void cadastraNotaVazia(int nnf)
        {
             banco = new Banco();
             string q2 = "select case (select count(*)> 0 as temfornecedor from fornecedor where razao_social = 'INTERNO') when true "+
            "then (select cod_fornecedor from fornecedor where razao_social = 'INTERNO') else 0 end";
            int codigo =  int.Parse(  banco.executaQueryRetornaDataTable(q2).Rows[0].ItemArray.GetValue(0).ToString());

            if(codigo ==0){
                cadastrarFornecedor("INTERNO", "INTERNO", "INTERNO", "INTERNO", "INTERNO", "INTERNO", "SERGIPE", "INTERNO"
                    , "INTERNO", "INTERNO", DateTime.Now, "INTERNO", "INTERNO", 0);

                codigo = int.Parse(banco.executaQueryRetornaDataTable(q2).Rows[0].ItemArray.GetValue(0).ToString());
            }

            string query = "INSERT INTO notaentrada("
            + "id, nnf, cuf, cnf, natop, indpag, mod, serie, demi, dsaient, "
            + "tpnf, cmunfg, tpimp, tpemis, cdv, tpamb, finnfe, procemi, verproc, "
            + "vbc, cicms, vbcst, vst, vprod, vfrete, vseg, vdesc, vii, vipi, "
            + "vpis, vcofins, voutro, vnf, nfat, vorig, vliq, cod_fornecedor)"
            + " VALUES ('NOTA INTERNA', " + nnf + ", 0 ,'0', 'VENDA DE PRODUCAO DO ESTABELECIMENTO', '0', 55, "
            + 0 + ", '" + DateTime.Now.ToShortDateString() + "','" + DateTime.Now.ToShortDateString() + "',"
            + 0+ ", '0',0,0,0,0,0,0, '0',0,0,0,0,0,0,0,0,0,0, 0,0,0,0,0,0,0,"+codigo+");";
            banco.executaQuerySemRetorno(query);
        }
        public void inserirNotaFiscal(Nota.NotaFiscal nota, double percentualLucro, double porcentagemDesconto)
        {
            try
            {
                #region query
                string query =      "INSERT INTO notaentrada("
                + "id, nnf, cuf, cnf, natop, indpag, mod, serie, demi, dsaient, "
                + "tpnf, cmunfg, tpimp, tpemis, cdv, tpamb, finnfe, procemi, verproc, "
                + "vbc, cicms, vbcst, vst, vprod, vfrete, vseg, vdesc, vii, vipi, "
                + "vpis, vcofins, voutro, vnf, nfat, vorig, vliq, cod_fornecedor)"
                + " VALUES ('"+nota.id+"', "+nota.nnf+", "+nota.cuf+",'"+nota.cnf+"', '"+nota.natop+"', '"+nota.indpag+"', "+nota.mod+", "
                +nota.serie+", '"+nota.demi.ToShortDateString()+"','"+nota.dsaient.ToShortDateString()+"',"
                + nota.tpnf +", '"+nota.cmunfg+"',"+nota.tpimp+","+nota.tpemis+","+nota.cdv+","
                +nota.tpamb+", "+nota.finnfe+", "+nota.procemi+", '"+nota.verproc+"', "
                + nota.vBC.ToString().Replace(',', '.') + ", " + nota.vICMS.ToString().Replace(',', '.') 
                + ", " + nota.vBCST.ToString().Replace(',', '.') + ", " + nota.vST.ToString().Replace(',', '.') + ", "
                + nota.vProd.ToString().Replace(',', '.') + "," + nota.vFrete.ToString().Replace(',', '.') + ", "
                + nota.vSeg.ToString().Replace(',', '.') + "," + nota.vDesc.ToString().Replace(',', '.') + ", " 
                + nota.vII.ToString().Replace(',', '.') + ", " + nota.vIPI.ToString().Replace(',', '.') + ", "
                + nota.vPIS.ToString().Replace(',', '.') + ", " + nota.vCOFINS.ToString().Replace(',', '.') + ", " 
                + nota.vOutro.ToString().Replace(',', '.') + ", " + nota.vNF.ToString().Replace(',', '.') + ", "
                + nota.nfat + ", " + nota.vorig.ToString().Replace(',', '.') + ", "
                + nota.vliq.ToString().Replace(',', '.') + ", " + nota.emit.cod_fornecedor + ");";
                #endregion
                banco = new Banco();
                banco.executaQuerySemRetorno(query);
                int cont = 1;
                foreach (Nota.Cobranca.dup du in nota.cobr.dup1)
                    inserirFatura(cont++, du.nDup, du.dVenc, du.vDup);
                foreach (Nota.ItemNota its in nota.det)
                {
                    if (!existeProduto(its.prod1.cProd))
                        cadastrarProduto(its.prod1.cProd,"789000" + its.prod1.cProd, its.prod1.xPROD, its.prod1.vUnCom * (1+(percentualLucro/100)), its.prod1.uCom
                            , 1, porcentagemDesconto / 100,its.prod1.CFOP,its.prod1.NCM, its.prod1.cProd);
                    insereEstoqueItem(nota.nnf, its.prod1.cProd, its.prod1.qCom, its.prod1.vUnCom,DateTime.Now.ToShortDateString());
                }

            }
            catch (Exception e)
            {
                MessageBox.Show("A Classe Banco.MetodoBanco \nMetodo inserirNotaFiscal  : "
               + " \n" + "Executou a mensagem : " + e.Message);
                
            }
        }
        public void inserirNotaFiscalInterna(Gerencial_Fisio_Nutry.NotaInterna.Conjunto.itemInterno.NotaInterna nota)
        {
            try
            {
                #region query
                string query = "INSERT INTO notaentrada("
                + "id, nnf, cuf, cnf, natop, indpag, mod, serie, demi, dsaient, "
                + "tpnf, cmunfg, tpimp, tpemis, cdv, tpamb, finnfe, procemi, verproc, "
                + "vbc, cicms, vbcst, vst, vprod, vfrete, vseg, vdesc, vii, vipi, "
                + "vpis, vcofins, voutro, vnf, nfat, vorig, vliq, cod_fornecedor)"
                + " VALUES ('" + nota.id + "', " + nota.nnf + ", " + nota.cuf + ",'" + nota.cnf + "', '" + nota.natop + "', '" + nota.indpag + "', " + nota.mod + ", "
                + nota.serie + ", '" + nota.demi.ToShortDateString() + "','" + nota.dsaient.ToShortDateString() + "',"
                + nota.tpnf + ", '" + nota.cmunfg + "'," + nota.tpimp + "," + nota.tpemis + "," + nota.cdv + ","
                + nota.tpamb + ", " + nota.finnfe + ", " + nota.procemi + ", '" + nota.verproc + "', "
                + nota.vBC.ToString().Replace(',', '.') + ", " + nota.vICMS.ToString().Replace(',', '.')
                + ", " + nota.vBCST.ToString().Replace(',', '.') + ", " + nota.vST.ToString().Replace(',', '.') + ", "
                + nota.vProd.ToString().Replace(',', '.') + "," + nota.vFrete.ToString().Replace(',', '.') + ", "
                + nota.vSeg.ToString().Replace(',', '.') + "," + nota.vDesc.ToString().Replace(',', '.') + ", "
                + nota.vII.ToString().Replace(',', '.') + ", " + nota.vIPI.ToString().Replace(',', '.') + ", "
                + nota.vPIS.ToString().Replace(',', '.') + ", " + nota.vCOFINS.ToString().Replace(',', '.') + ", "
                + nota.vOutro.ToString().Replace(',', '.') + ", " + nota.vNF.ToString().Replace(',', '.') + ", "
                + nota.nfat + ", " + nota.vorig.ToString().Replace(',', '.') + ", "
                + nota.vliq.ToString().Replace(',', '.') + ", " + nota.fornec.cod_fornecedor + ");";
               
                #endregion
                banco = new Banco();
                banco.executaQuerySemRetorno(query);
               
            }
            catch (Exception e)
            {
                MessageBox.Show("A Classe Banco.MetodoBanco \nMetodo inserirNotaFiscal  : "
               + " \n" + "Executou a mensagem : " + e.Message);

            }
        }
        public void inserirFatura(int cod_fatura, int ndup, DateTime dvenc, double vdup)
        {

            try{
                banco = new Banco();
                string query = "INSERT INTO fatura( cod_fatura, ndup, dvenc, vdup)"
                    + " VALUES (" + cod_fatura + ", " + ndup + ", '" + dvenc.ToShortDateString() + "'," + vdup.ToString().Replace(',', '.') + ");";

                banco = new Banco();
                banco.executaQuerySemRetorno(query);
            }
            catch (Exception e)
            {
                MessageBox.Show("A Classe Banco.MetodoBanco \nMetodo inserirFatura  : "
               + " \n" + "Executou a mensagem : " + e.Message);

            }
        }
        public void insereEstoqueItem(int nnf, int cod_produto, double quantidadeNota, double valorCompra, string validade)
        {
            try{
                banco = new Banco();
                if(!temNota(nnf))
                {
                    cadastraNotaVazia(nnf);
                }

                string query = "INSERT INTO entrada(  nnf, cod_produto, quantidadeestoque, quantidadenota,  valorcompra, datavalidade)"
                        + " VALUES ( " + nnf + ", " + cod_produto + ", " + quantidadeNota.ToString().Replace(',', '.') + "," + quantidadeNota.ToString().Replace(',', '.') + "," 
                        + valorCompra.ToString().Replace(',', '.') + ",'" + validade + "')";
              
             int codigo = Convert.ToInt16(   banco.executaQueryRetorno(query, "cod_entrada"));

               if (!temProdutoEntrada(cod_produto)) { 
               string query2  = "insert into produtoentrada values ("+cod_produto+","+codigo+")";
               banco.executaQuerySemRetorno(query2);
               }
             
            }
            catch (Exception e)
            {
                MessageBox.Show("A Classe Banco.MetodoBanco \nMetodo inserirNotaFiscal  : "
               + " \n" + "Executou a mensagem : " + e.Message);
             
            }
        }
        public void insereEstoqueItemExistente(int nnf, int cod_produto, double quantidadeNota)
        {
            try
            {
                banco = new Banco();
                string query = "update entrada set quantidadeEstoque = quantidadeEstoque + "+quantidadeNota.ToString().Replace(',','.')
                    +" where nnf = "+nnf+" and cod_produto = "+cod_produto;
                banco.executaQuerySemRetorno(query);

            }
            catch (Exception e)
            {
                MessageBox.Show("A Classe Banco.MetodoBanco \nMetodo inserirNotaFiscal  : "
               + " \n" + "Executou a mensagem : " + e.Message);

            }
        }
        public bool temProdutoEntrada(int cod_produto)
        {
            try{
                string query = "select count(*)>0 as temLinha from produtoEntrada where cod_produto = "+cod_produto;
                banco = new Banco();
            return   Convert.ToBoolean(   banco.executaQueryRetornaDataTable(query).Rows[0].ItemArray.GetValue(0));
            }
            catch (Exception e)
            {
                MessageBox.Show("A Classe Banco.MetodoBanco \nMetodo temProdutoEntrada  : "
               + " \n" + "Executou a mensagem : " + e.Message);
                return false;
            }

        }
        public DataTable entradasDoProduto(int cod_produto)
        {
            try
            {
                banco = new Banco();
                string query = "select e.cod_entrada as entrada, e.NNF, e.quantidadeNota as \"Quantidade da Nota\""+
                ", e.quantidadeEstoque as \"Estoque Atual\",e.valorCompra as \"Valor de Compra\", e.datavalidade as \"Data de Vencimento\"" 
                +"from entrada e	where e.cod_produto = "+cod_produto;
              
                DataTable dtt = banco.executaQueryRetornaDataTable(query);
                return dtt;
            }
            catch (Exception e)
            {
                MessageBox.Show("A Classe Banco.MetodoBanco \nMetodo entradasDoProduto  : "
               + " \n" + "Executou a mensagem : " + e.Message);
                return new DataTable();
            }
        }
        public bool estoqueAutorizado(int cod_produto, double quantidadeComprada)
        {
            try
            {
                if (estoqueDoProduto(cod_produto) < quantidadeComprada)
                    return false;
                else return true;

            }
            catch (Exception e)
            {
                MessageBox.Show("A Classe Banco.MetodoBanco \nMetodo estoqueAutorizado  : "
               + " \n" + "Executou a mensagem : " + e.Message);
                return false;
            }

        }
        public int ponteiroDaEntradaDoProduto(int cod_produto)
        {
            try
            {
                banco = new Banco();
                DataTable dtt = banco.executaQueryRetornaDataTable
                    ("select cod_entrada as entrada from produtoENtrada where cod_produto = "+cod_produto);
                return Convert.ToInt16(dtt.Rows[0].ItemArray.GetValue(0).ToString());

            }
            catch (Exception e)
            {
                MessageBox.Show("A Classe Banco.MetodoBanco \nMetodo ponteiroDaEntradaDoProduto  : "
               + "cod_produto : " + cod_produto + " \n" + "Executou a mensagem : " + e.Message);
                return 0;
            }
        }
        public DataTable entradaByCod_entrada(int cod_entrada)
        {//
            try
            {
                banco = new Banco();
                string query = "select NNF, quantidadeNota,"
                    +" quantidadeEstoque, valorCompra, dataValidade from entrada where cod_entrada = " + cod_entrada;

                DataTable dtt = banco.executaQueryRetornaDataTable(query);
                return dtt;
            }
            catch (Exception e)
            {
                MessageBox.Show("A Classe Banco.MetodoBanco \nMetodo entradaByCod_entrada  : "
               + " \n" + "Executou a mensagem : " + e.Message);
                return new DataTable();
            }
        }
        public bool temPonteiro(int cod_produto, int cod_entrada)
        {       
            try
            {
                banco = new Banco();
                string query = "select count(*) >0 as temPonteiro from entrada where cod_produto = "
                    +cod_produto+" and cod_entrada = "+cod_entrada+" and quantidadeestoque >0" ;
                return Convert.ToBoolean( banco.executaQueryRetornaDataTable(query).Rows[0].ItemArray.GetValue(0));  
            }
            catch (Exception e)
            {
                MessageBox.Show("A Classe Banco.MetodoBanco \nMetodo temPonteiro  : "
               + " \n" + "Executou a mensagem : " + e.Message);
                return false;
            }
        }
        public void atualizaPonteiro(int cod_produto, int cod_entrada)
        {
            try
            {
                banco = new Banco();
                string query = "update produtoentrada set cod_entrada = "+cod_entrada+" where cod_produto = "+cod_produto;
                banco.executaQuerySemRetorno(query);
            }
            catch (Exception e)
            {
                MessageBox.Show("A Classe Banco.MetodoBanco \nMetodo atualizaPonteiro  : "
               + " \n" + "Executou a mensagem : " + e.Message);
              
            }
        }
        public void atualizaEntrada(int cod_entrada, double valorCompra, string data)
        {
            try
            {
                banco = new Banco();
                string query = "update entrada set valorCompra = " + valorCompra.ToString().Replace(',','.') 
                    + " , datavalidade = '"+data+"' where cod_entrada = " + cod_entrada;
                banco.executaQuerySemRetorno(query);
            }
            catch (Exception e)
            {
                MessageBox.Show("A Classe Banco.MetodoBanco \nMetodo atualizaEntrada  : "
               + " \n" + "Executou a mensagem : " + e.Message);

            }
        }
        public void atualizaEntradaValor(int cod_entrada, double valorCompra)  
        {
            try
            {
                banco = new Banco();
                string query = "update entrada set valorCompra = " + valorCompra.ToString().Replace(',', '.')
                    + " where cod_entrada = " + cod_entrada;
                banco.executaQuerySemRetorno(query);
            }
            catch (Exception e)
            {
                MessageBox.Show("A Classe Banco.MetodoBanco \nMetodo atualizaEntradaValor  : "
               + " \n" + "Executou a mensagem : " + e.Message);

            }
        }
        public void atualizaEntradaDataValidade(int cod_entrada,  string data)
        {
            try
            {
                banco = new Banco();
                string query = "update entrada set datavalidade = '" + data + "' where cod_entrada = " + cod_entrada;
                banco.executaQuerySemRetorno(query);
            }
            catch (Exception e)
            {
                MessageBox.Show("A Classe Banco.MetodoBanco \nMetodo atualizaEntrada  : "
               + " \n" + "Executou a mensagem : " + e.Message);

            }
        }
        public void atualizaReferencia(int cod_produto, string referencia)
        {
            try
            {
                banco = new Banco();
                string perg = "update produto set referencia = '" + referencia + "' where  "
                    + " cod_produto = "+ cod_produto;
                

                if(podeAtualizarReferencia(referencia))
                        banco.executaQuerySemRetorno(perg);
            }
            catch (Exception e)
            {
                MessageBox.Show("A Classe Banco.MetodoBanco \nMetodo atualizaReferencia  : "
               + " \n" + "Executou a mensagem : " + e.Message);

            }
        }
        public void atualizaDescontoProduto(int cod_produto, double descontoLimite)
        {
            try
            {
                banco = new Banco();
                string perg = "update produto set descontoLimite = '" + descontoLimite + "' where  "
                    + " cod_produto = " + cod_produto;

                banco.executaQuerySemRetorno(perg);
            }
            catch (Exception e)
            {
                MessageBox.Show("A Classe Banco.MetodoBanco \nMetodo atualizaDescontoProduto  : "
               + " \n" + "Executou a mensagem : " + e.Message);

            }
        }
        public bool podeAtualizarReferencia( string referencia)
        {
            try
            {
                banco = new Banco();
                string query = "select count(*)=0 podeTrocar from produto where referencia = '"+referencia+"'";
                return Convert.ToBoolean(banco.executaQueryRetornaDataTable(query).Rows[0].ItemArray.GetValue(0));
            }
            catch (Exception e)
            {
                MessageBox.Show("A Classe Banco.MetodoBanco \nMetodo podeAtualizarReferencia  : "
               + " \n" + "Executou a mensagem : " + e.Message);
                return false;
            }
        }
        public double descontoRevendedor(int cod_pessoa)
        {
            banco = new Banco();
            try
            {
                string query = "select r.descontoEspecial "
                    +"from pessoa p inner join revendedor r on (p.cod_pessoa = r.cod_pessoa) where p.cod_pessoa = "+ cod_pessoa;

                return Convert.ToDouble(banco.executaQueryRetornaDataTable
                (query).Rows[0].ItemArray.GetValue(0));
            }
            catch (Exception e)
            {
                MessageBox.Show("A Classe Banco.MetodoBanco \nMetodo estoqueDoProduto \ncod_pessoa : "
               + cod_pessoa + " \nExecutou a mensagem : " + e.Message);
                return 0;
            }

        }
        public int cod_empresa()
        {
            banco = new Banco();
            try
            {
                string query = "select cod_empresa from empresa limit 1";

                return Convert.ToInt16(banco.executaQueryRetornaDataTable
                (query).Rows[0].ItemArray.GetValue(0));
            }
            catch (Exception e)
            {
                MessageBox.Show("A Classe Banco.MetodoBanco \nMetodo cod_empresa \ncod_pessoa : "
               + " \nExecutou a mensagem : " + e.Message);
                return 0;
            }
        }    
        public int cod_revendedorByCodPessoa(int cod_pessoa)
        {
            try
            {
                banco = new Banco();
                return Convert.ToInt16( banco.executaQueryRetornaDataTable("select cod_revendedor from revendedor where cod_pessoa = "+cod_pessoa).Rows[0].ItemArray.GetValue(0));
            }
            catch (Exception e)
            {
                MessageBox.Show("A Classe Banco.MetodoBanco \nMetodo cod_empresa \n cod_revendedorByCodPessoa : "
               + " \nExecutou a mensagem : " + e.Message);
                return 0;
            }

        }
        public int cod_clienteByCodPessoa(int cod_pessoa)
        {
            try
            {
                banco = new Banco();
                return Convert.ToInt16(banco.executaQueryRetornaDataTable("select cod_cliente from cliente where cod_pessoa = " + cod_pessoa).Rows[0].ItemArray.GetValue(0));
            }
            catch (Exception e)
            {
                MessageBox.Show("A Classe Banco.MetodoBanco \nMetodo cod_empresa \n cod_clienteByCodPessoa : "
               + " \nExecutou a mensagem : " + e.Message);
                return 0;
            }

        }
        public void encerrarVenda(Logica.VendaObj venda)
        {
            try
            {
                string cliente = "";string valor="";
                if(venda.pessoa.isCliente){cliente = ", cod_cliente";
                valor = cod_clienteByCodPessoa(venda.pessoa.cod_pessoa).ToString()+",";
                }
                else if(venda.pessoa.isRevendedor)
                {
                    cliente = ", cod_revendedor";
                    valor = cod_revendedorByCodPessoa(venda.pessoa.cod_pessoa).ToString()+",";
                }
                string query = "INSERT INTO venda( cod_funcionario, cod_empresa "+cliente
                        +", datavenda, isativo, valorvenda, horario) " 
            +" VALUES ( "+venda.funcionario.codFuncionario+" , "+venda.cod_empresa+","+valor+"'"+DateTime.Now.ToShortDateString()
            +"',true, "+(venda.valorTotal-venda.valorDescontoEspecial).ToString().Replace(',','.')+",'"+DateTime.Now.ToShortTimeString()+"')";
                banco = new Banco();
                int retorno = int.Parse( banco.executaQueryRetorno(query, "cod_venda"));
                venda.cod_venda = retorno;
                preencheParcelas(venda);
                preencheItens(venda);
            }
            catch (Exception e)
            {
                MessageBox.Show("A Classe Banco.MetodoBanco \nMetodo encerrarVenda \n : "
              + " \nExecutou a mensagem : " + e.Message);
               
            }

        }
        public void preencheParcelas(Logica.VendaObj venda)
        {
            try{
                banco = new Banco();
                
                foreach (Logica.Pagamento pag in venda.pagamento)
                {
                     string datePag = "null";

                     if (pag.isPago || pag.isAvista)
                         datePag = "'"+pag.dataPagamento.ToShortDateString()+"'";
                   
                    string query = "INSERT INTO pagamento(cod_pagamento, cod_venda, descricao, ispago,"
                        +" dataprevista, datapagamento, valorpagamento)"
                                    +"VALUES ("+pag.cod_pagamento+","+venda.cod_venda+",'"+pag.descricao+"', "+pag.isPago+",'"
                                    +pag.dataPrevista.ToShortDateString()+"' , "+datePag+", "+pag.valorPagamento.ToString().Replace(',','.')+");";
                    banco.executaQuerySemRetorno(query);

                   

                    //aqui eu enfio a logica de pagamentos cada uma das parcelas.!
                    if (pag.tipoPagamento == 1  )
                    {
                        insereMovimentacao(3, pag.valorPagamento);
                    }
                    else if (pag.tipoPagamento == 2 && pag.descricao == "Entrada"){
                        insereMovimentacao(4, pag.valorPagamento);
                    }
                    else if (pag.tipoPagamento == 4 && pag.descricao == "Entrada")
                    {
                        insereMovimentacao(3, pag.valorPagamento);
                    }
                    else if (pag.tipoPagamento == 3)//debito
                    {
                        insereMovimentacao(17, pag.valorPagamento);

                    }
                    else if (pag.tipoPagamento == 2)
                    {

                    }
                }

            }
            catch (Exception e)
            {
                MessageBox.Show("A Classe Banco.MetodoBanco \nMetodo preencheParcelas \n : "
              + " \nExecutou a mensagem : " + e.Message);

            }
        }   
        public void insereMovimentacao(int cod_tipomovi, double valor )
        {
            try
            {
                banco = new Banco();
                string query = "insert into movimentacao (cod_tipomovi, valor) values (" + cod_tipomovi + "," + valor.ToString().Replace(',', '.') + ")";
                banco.executaQuerySemRetorno(query);
            }
            catch (Exception e)
            {
                MessageBox.Show("A Classe Banco.MetodoBanco \nMetodo insereMovimentacao \n : "
              + " \nExecutou a mensagem : " + e.Message);

            }
        }
        public void preencheItens(Logica.VendaObj venda)
        {
            try
            {
                banco = new Banco();
            foreach (Logica.ItemObj itens in venda.itens)
            {
                string query = "INSERT INTO item( cod_venda, cod_produto, quantidadeitem, isativo, precosaida)"
                                + "   VALUES (" + venda.cod_venda + "," + itens.produto.cod_Produto + ", "
                                + itens.quantidadeItem.ToString().Replace(',', '.') + ", true, "
                                + itens.precoSaida.ToString().Replace(',', '.') + ");";
                banco.executaQuerySemRetorno(query);
            }

            }
            catch (Exception e)
            {
                MessageBox.Show("A Classe Banco.MetodoBanco \nMetodo preencheItens \n : "
              + " \nExecutou a mensagem : " + e.Message);

            }
        }     
        public string referenciaByProduto(int cod_produto)
        {
             try {
                banco = new Banco();
            DataTable dtt = banco.executaQueryRetornaDataTable("select referencia from produto where cod_produto ='"
            +cod_produto+"'");
            return  dtt.Rows[0].ItemArray.GetValue(0).ToString();

             }
             catch (Exception e)
             {
                 MessageBox.Show("A Classe Banco.MetodoBanco \nMetodo referenciaByProduto  : "
                + "cod_produto : " + cod_produto + " \n" + "Executou a mensagem : " + e.Message);
                 return null;
             }
        }
        public double descontoByProduto(int cod_produto)
        {
             banco = new Banco();
            try
            {
                string query = "select descontolimite from produto where cod_produto ='"
                    +cod_produto+"'";

                return Convert.ToDouble(banco.executaQueryRetornaDataTable
                (query).Rows[0].ItemArray.GetValue(0));
            }
            catch (Exception e)
            {
                MessageBox.Show("A Classe Banco.MetodoBanco \nMetodo  descontoByProduto  : "
               + " \nExecutou a mensagem : " + e.Message);
                return 0;
            }
        }
        public string dataValidadeByProdutoEntrada(int cod_produto, int nnf)
        {
             banco = new Banco();
            try
            {
                DataTable dtt =banco.executaQueryRetornaDataTable("select datavalidade from entrada e inner join " 
                +"produto p on (e.cod_produto = p.cod_produto) inner join notaentrada n on (e.nnf = n.nnf) where "
                +"p.cod_produto ='" + cod_produto + "' and " + " n.nnf ='" + nnf + "'");
                return Convert.ToDateTime( dtt.Rows[0].ItemArray.GetValue(0)).ToShortDateString();

            }
            catch (Exception e)
            {
                MessageBox.Show("A Classe Banco.MetodoBanco \nMetodo dataValidadeByProdutoEntrada  : "
               + "cod_produto : " + cod_produto + " \n" + "Executou a mensagem : " + e.Message);
                return null;
            }
        }
        public Logica.ItemDoPedido[] itensDoPedido(int cod_pedido)
        {
            try
            {
                Logica.ItemDoPedido[] itens;
                banco = new Banco();
                string query = "select cod_pedido,quantidadeitem,precosaida, cod_produto from itempedido where cod_pedido = "+cod_pedido;
                DataTable dtt = banco.executaQueryRetornaDataTable(query);
                itens = new Logica.ItemDoPedido[dtt.Rows.Count];
                for (int i = 0; i < itens.Length; i++)
                {
                    itens[i] = new Logica.ItemDoPedido();
                    itens[i].cod_pedido = int.Parse(dtt.Rows[i].ItemArray.GetValue(0).ToString());
                    itens[i].precoSaida = double.Parse(dtt.Rows[i].ItemArray.GetValue(2).ToString());
                    itens[i].quantidadeItem = int.Parse(dtt.Rows[i].ItemArray.GetValue(1).ToString());
                    itens[i].produto = carregarProdutoByCodigo(int.Parse(dtt.Rows[i].ItemArray.GetValue(3).ToString()));

                }

                return itens;
            }
            catch (Exception e)
            {
                MessageBox.Show("A Classe Banco.MetodoBanco \nMetodo itensDoPedido \n : "
              + " \nExecutou a mensagem : " + e.Message);
                return null;
            }
        }
        public int codigoEntradaProdutoByNnfAndProduto(int cod_produto, int nnf)
        {
          try
            {
                banco = new Banco();
                string query = "select cod_entrada from entrada e inner join "
                  + "produto p on (e.cod_produto = p.cod_produto) inner join notaentrada n on (e.nnf = n.nnf) where "
                  + "p.cod_produto =" + cod_produto + " and " + " n.nnf ='" + nnf + "'";
                return Convert.ToInt16( banco.executaQueryRetornaDataTable(query).Rows[0].ItemArray.GetValue(0));
            }
          catch (Exception e)
          {
              MessageBox.Show("A Classe Banco.MetodoBanco \nMetodo codigoEntradaProdutoByNnfAndProduto   : "
             + "cod_produto : " + cod_produto + " \n" + "Executou a mensagem : " + e.Message);
              return 0;
          }
        }
        public void inserirPedido(Logica.Pedido pedido)
        {
            try
            {
                string cliente = "";string valor="";
                if(pedido.pessoa.isCliente){cliente = ", cod_cliente";
                valor = cod_clienteByCodPessoa(pedido.pessoa.cod_pessoa).ToString()+",";
                }
                else if(pedido.pessoa.isRevendedor)
                {
                    cliente = ", cod_revendedor";
                    valor = cod_revendedorByCodPessoa(pedido.pessoa.cod_pessoa).ToString()+",";
                }
                string query = "INSERT INTO pedido( cod_funcionario, cod_empresa "+cliente
                        +", datapedido,valortotal) " 
            +" VALUES ( "+pedido.funcionario.codFuncionario+" , "+pedido.cod_empresa+","+valor+"'"+DateTime.Now.ToShortDateString()
            +"', "+(pedido.valorTotal-pedido.valorDescontoEspecial).ToString().Replace(',','.')+")";
                banco = new Banco();
                int retorno = int.Parse( banco.executaQueryRetorno(query, "cod_pedido"));
                pedido.cod_pedido = retorno;
             
                preencheItensPedido(pedido);
            }
            catch (Exception e)
            {
                MessageBox.Show("A Classe Banco.MetodoBanco \nMetodo encerrarVenda \n : "
              + " \nExecutou a mensagem : " + e.Message);
               
            }

        }
        public void preencheItensPedido(Logica.Pedido pedido)
        {
            try
            {
                banco = new Banco();
            foreach (Logica.ItemDoPedido itens in pedido.itens)
            {
                string query = "INSERT INTO itempedido( cod_pedido, cod_produto, quantidadeitem, precosaida)"
                                + "   VALUES (" + pedido.cod_pedido + "," + itens.produto.cod_Produto + ", "
                                + itens.quantidadeItem.ToString().Replace(',', '.') + ","
                                + itens.precoSaida.ToString().Replace(',', '.') + ");";
                banco.executaQuerySemRetorno(query);
            }

            }
            catch (Exception e)
            {
                MessageBox.Show("A Classe Banco.MetodoBanco \nMetodo ItemDoPedido \n : "
              + " \nExecutou a mensagem : " + e.Message);

            }
        }
        public Logica.Pessoa carregarRevendedorByPedido(int cod_pedido)
        {
            try
            {
            string query = "select c.cod_pessoa from pedido p inner join revendedor c on (c.cod_revendedor = p.cod_revendedor)"
                +" where cod_pedido = "+cod_pedido;

            return null;
            }
            catch (Exception e)
            {
                MessageBox.Show("A Classe Banco.MetodoBanco \nMetodo carregarRevendedorByPedido \n : "
              + " \nExecutou a mensagem : " + e.Message);
                return null;
            }
        }
        public Logica.Pessoa carregarPessoaByPedido(int cod_pedido)
        {
            try{
            string query = "select c.cod_pessoa from pedido p inner join cliente c on (c.cod_cliente = p.cod_cliente)"
            + " where cod_pedido = " + cod_pedido;
            return null;
            }
            catch (Exception e)
            {
                MessageBox.Show("A Classe Banco.MetodoBanco \nMetodo carregarPessoaByPedido \n : "
              + " \nExecutou a mensagem : " + e.Message);
                return null;
            }
        }
        public DataTable clienteDoPedido(int cod_pedido)
        {
            try
            {
                banco = new Banco();
                string query = "select cod_pedido,"
                    + "( case cod_cliente is not null when true  then cod_cliente else cod_revendedor end) as pessoa"
                    + ", dataPedido, valorTotal from pedido order by cod_pedido";
                DataTable dtt = banco.executaQueryRetornaDataTable(query);
                return dtt;
            }
            catch (Exception e)
            {
                MessageBox.Show("A Classe Banco.MetodoBanco \nMetodo retornaTodosPedidos \n : "
              + " \nExecutou a mensagem : " + e.Message);
                return new DataTable();
            }
        }
        //select c.cod_pessoa from pedido p inner join revendedor c on (c.cod_revendedor = p.cod_revendedor) cliente c on (c.cod_cliente = p.cod_cliente)
        //    where c.cod_pedido = 1       
        public DataTable retornaTodosPedidos()
        {
            try
            {
                banco = new Banco();
                string query = "select cod_pedido,"
                    + "( case cod_cliente is not null when true  then cod_cliente else cod_revendedor end) as pessoa"
                    + ", dataPedido, valorTotal from pedido order by cod_pedido";
                DataTable dtt = banco.executaQueryRetornaDataTable(query);
                return dtt;
            }
            catch (Exception e)
            {
                MessageBox.Show("A Classe Banco.MetodoBanco \nMetodo retornaTodosPedidos \n : "
              + " \nExecutou a mensagem : " + e.Message);
                return new DataTable();
            }
        }
        public DataTable retornaItensDoPedido(int cod_pedido)
        {
            try
            {
                banco = new Banco();
                string query = "select cod_produto, quantidadeItem, precoSaida from itemPedido where cod_pedido = "+cod_pedido;
                DataTable dtt = banco.executaQueryRetornaDataTable(query);
                return dtt;
            }
            catch (Exception e)
            {
                MessageBox.Show("A Classe Banco.MetodoBanco \nMetodo retornaItensDoPedido \n : "
              + " \nExecutou a mensagem : " + e.Message);
                return new DataTable();
            }
        }
        public double aberturaCaixa()
        {
            try
            {
                banco = new Banco();
                string query = "select  valoraberturaCaixa();";
                DataTable dtt = banco.executaQueryRetornaDataTable(query);
                return Convert.ToDouble( dtt.Rows[0].ItemArray.GetValue(0).ToString());
            }
            catch (Exception e)
            {
                MessageBox.Show("A Classe Banco.MetodoBanco \nMetodo aberturaCaixa \n : "
              + " \nExecutou a mensagem : " + e.Message);
                return 0;
            }
        }
        public void preencheVariaveisDoDia()
        {
            banco = new Banco();
            string sSangriga = "select  (case  sum(valor) is null when true then 0 else sum(valor) end ) as EntradaCaixaDia  from movimentacao m inner join tipoMovi t on (t.cod_tipomovi = m.cod_tipoMovi) "
                        + " where m.datamovi = current_date and iscaixa = true and isentrada = false and (t.cod_tipomovi = 1 )  ";
            double sangria = Convert.ToDouble(banco.executaQueryRetornaDataTable(sSangriga).Rows[0].ItemArray.GetValue(0)); ;
            Variaveis.MovimentoCaixa.sangria = sangria;


            string valorEntrada = "select ( case  sum(valor) is null when true then 0 else sum(valor) end) as EntradaCaixaDia  "
                + "from movimentacao m inner join tipoMovi t on (t.cod_tipomovi = m.cod_tipoMovi) "
                + "where m.datamovi = current_date and iscaixa = true and isentrada = true;";
            string valorSaida = "select ( case  sum(valor) is null when true then 0 else sum(valor) end) as SaidaCaixaDia  "
                + "from movimentacao m inner join tipoMovi t on (t.cod_tipomovi = m.cod_tipoMovi) "
                + "where m.datamovi = current_date and iscaixa = true and isentrada = false;";
           
            double vEntrada  = Convert.ToDouble(  banco.executaQueryRetornaDataTable(valorEntrada).Rows[0].ItemArray.GetValue(0).ToString());
            double vSaida = Convert.ToDouble(banco.executaQueryRetornaDataTable(valorSaida).Rows[0].ItemArray.GetValue(0).ToString());
            //valor caixa = valorentradaDia
            Variaveis.MovimentoCaixa.valorCaixa = Variaveis.MovimentoCaixa.valorAbertura + (vEntrada - vSaida);
            Variaveis.MovimentoCaixa.valorEntradaVista = vEntrada;
            Variaveis.MovimentoCaixa.saidasPorPagamento = vSaida-sangria;

            string vistaHoje = "select ( case  sum(valor) is null when true then 0 else sum(valor) end) as entradaAVistaHoje  from movimentacao m inner join tipoMovi t on (t.cod_tipomovi = m.cod_tipoMovi) " +
               " where m.datamovi = current_date and iscaixa = true and isentrada = true and t.cod_tipomovi = 3;";
            string troco = "select ( case  sum(valor) is null when true then 0 else sum(valor) end) as entradaAVistaHoje  from movimentacao m inner join tipoMovi t on (t.cod_tipomovi = m.cod_tipoMovi) " +
               " where m.datamovi = current_date and iscaixa = true and isentrada = true and t.cod_tipomovi = 2;";
            Variaveis.MovimentoCaixa.troco = Convert.ToDouble(banco.executaQueryRetornaDataTable(troco).Rows[0].ItemArray.GetValue(0).ToString());
            Variaveis.MovimentoCaixa.valorEntradaVista =  Convert.ToDouble(banco.executaQueryRetornaDataTable(vistaHoje).Rows[0].ItemArray.GetValue(0).ToString());


            string entradaPorCartao = "select  (case  sum(valor) is null when true then 0 else sum(valor) end ) as EntradaCaixaDia from "
                + " movimentacao m inner join tipoMovi t on (t.cod_tipomovi = m.cod_tipoMovi) "
            + " where m.datamovi = current_date and iscaixa = true and isentrada = true and (t.cod_tipomovi = 7);";// or t.cod_tipomovi = 4);";
            
            Variaveis.MovimentoCaixa.valorEntradaCartao =   Convert.ToDouble(banco.executaQueryRetornaDataTable(entradaPorCartao).Rows[0].ItemArray.GetValue(0).ToString());
            string cartao = "select ( case  sum(valor) is null when true then 0 else sum(valor) end) as entradaAVistaHoje  " +
                    " from movimentacao m inner join tipoMovi t on (t.cod_tipomovi = m.cod_tipoMovi) " +
                    " where m.datamovi = current_date and iscaixa = false and isentrada  and t.cod_tipomovi = 17;";
            Variaveis.MovimentoCaixa.entradaDebito = Convert.ToDouble(banco.executaQueryRetornaDataTable(cartao).Rows[0].ItemArray.GetValue(0).ToString());

            
        }
        public string[] conjuntoDeMovimentacaoSaida()
        {
            try
            {
                string query = "select descricaomovi from tipomovi where cansee = true and isEntrada = false order by descricaoMovi desc";
                banco = new Banco();
                string [] retorno ;
                DataTable dtt = banco.executaQueryRetornaDataTable(query);

                retorno = new string[dtt.Rows.Count];
                for(int i = 0; i < dtt.Rows.Count; i++)
                    retorno[i] = dtt.Rows[i].ItemArray.GetValue(0).ToString();
                return retorno;

            }
            catch (Exception e)
            {
                MessageBox.Show("A Classe Banco.MetodoBanco \nMetodo conjuntoDeMovimentacaoSaida string [] \n : "
              + " \nExecutou a mensagem : " + e.Message);
                return new string [] {""};
            }
        }
        public int cod_moviByDescricao(string descricao)
        {
            try
            {
                string query = "select cod_tipoMovi from tipoMovi where descricaomovi = '"+descricao+"'";
                banco = new Banco();
                DataTable dtt = banco.executaQueryRetornaDataTable(query);
                return Convert.ToInt16(dtt.Rows[0].ItemArray.GetValue(0));

            }
            catch (Exception e)
            {
                MessageBox.Show("A Classe Banco.MetodoBanco \nMetodo conjuntoDeMovimentacaoSaida string [] \n : "
              + " \nExecutou a mensagem : " + e.Message);
                return 0;
            }
        }
        public bool isAdm(string usuario, string senha)
        {
            try
            {
                banco = new Banco();
                string query = "select count (*)= 1  from funcionario f inner join funcao u on (u.cod_funcao = f.cod_funcao) where idLogin = '" + usuario + "' and senha = '" + senha + "' and u.nivelacesso = 1;";
                return Convert.ToBoolean(banco.executaQueryRetornaDataTable(query).Rows[0].ItemArray.GetValue(0));
            }
            catch (Exception e)
            {
                MessageBox.Show("A Classe Banco.MetodoBanco \nMetodo isAdm string [] \n : "
          + " \nExecutou a mensagem : " + e.Message);
                return false;
            }
        }
        public int cadastraPessoa(string nome, string endereco, string numero
            , string cidade, string uf, string cep, string datanascimento,string telefone
            , string email, string cpf, string rg, string url , bool isrevendedor, double comissaoRevend )
        {
            try
            {
                banco = new Banco();

                string query = "INSERT INTO pessoa(nome, endereco, telefone)"
                           + " VALUES ('" + nome + "','" + endereco + "','" + telefone + "')";
                int retorno = int.Parse(banco.executaQueryRetorno(query, "cod_pessoa"));

                if (numero.Length > 0)
                {
                    string um = "update pessoa set numero= '" + numero + "' where cod_pessoa=" + retorno;
                    banco.executaQuerySemRetorno(um);
                }
                if (cidade.Length > 0)
                {
                    string um = "update pessoa set cidade= '" + cidade + "' where cod_pessoa=" + retorno;
                    banco.executaQuerySemRetorno(um);
                }
                if (uf.Length > 0)
                {
                    string um = "update pessoa set uf= '" + uf + "' where cod_pessoa=" + retorno;
                    banco.executaQuerySemRetorno(um);
                }
                if (cep.Length > 0)
                {
                    string um = "update pessoa set cep= '" + cep + "' where cod_pessoa=" + retorno;
                    banco.executaQuerySemRetorno(um);
                }
                if (datanascimento.Length > 0)
                {
                    string um = "update pessoa set datanascimento =  '" + datanascimento + "' where cod_pessoa=" + retorno;
                    banco.executaQuerySemRetorno(um);
                }
                if (email.Length > 0)
                {
                    string um = "update pessoa set  email ='" + email + "' where cod_pessoa=" + retorno;
                    banco.executaQuerySemRetorno(um);
                }
                if (cpf.Length > 0)
                {
                    string um = "update pessoa set cpf= '" + cpf + "' where cod_pessoa=" + retorno;
                    banco.executaQuerySemRetorno(um);
                }
                if (rg.Length > 0)
                {
                    string um = "update pessoa set rg= '" + rg + "' where cod_pessoa=" + retorno;
                    banco.executaQuerySemRetorno(um);
                }
                if (url.Length > 0)
                {
                    string um = "update pessoa set url= '" + url + "' where cod_pessoa=" + retorno;
                    banco.executaQuerySemRetorno(um);
                }


                string cliente = "INSERT INTO cliente( cod_pessoa)    VALUES ("+retorno+");";
                banco.executaQuerySemRetorno(cliente);

                if (isrevendedor)
                {
                    string revendedor = "INSERT INTO revendedor( cod_pessoa, descontoespecial)    VALUES (" + retorno + ","+(comissaoRevend/100).ToString().Replace(',','.')+" );";
                    banco.executaQuerySemRetorno(revendedor);
                }
                return retorno;
            }
            catch (Exception e)
            {
                MessageBox.Show("A Classe Banco.MetodoBanco \nMetodo cadastraPessoa \n : "
              + " \nExecutou a mensagem : " + e.Message);
                return 0;

            }
        }
        public bool temPessoaByName(string nome,string  cpf){

            try
            {
                banco = new Banco();
                string query = "select count(*)>0 as temPessoa from pessoa where nome = '"+nome+"' and cpf = '"+cpf+"'";
                return Convert.ToBoolean(banco.executaQueryRetornaDataTable(query).Rows[0].ItemArray.GetValue(0));
            }
            catch (Exception e)
            {

                return false;
            }
        }
        public int codPessoaByCodCliente(int cod_cliente)
        {
            try
            {
                banco = new Banco();
                string query = "select cod_pessoa from cliente where cod_cliente ='"+cod_cliente+"'";
                return Convert.ToInt16(banco.executaQueryRetornaDataTable(query).Rows[0].ItemArray.GetValue(0));
            }
            catch (Exception e)
            {
                MessageBox.Show("A Classe Banco.MetodoBanco \nMetodo codPessoaByCodCliente string [] \n : "
           + " \nExecutou a mensagem : " + e.Message);
                return 0;
            }


        }
        public int codPessoaByCodRevendedor(int cod_revendedor)
        {
            try
            {
                banco = new Banco();
                string query = "select cod_pessoa from cliente where cod_revendedor ='" + cod_revendedor + "'";
                return Convert.ToInt16(banco.executaQueryRetornaDataTable(query).Rows[0].ItemArray.GetValue(0));
            }
            catch (Exception e)
            {
                MessageBox.Show("A Classe Banco.MetodoBanco \nMetodo codPessoaByCodRevendedor string [] \n : "
           + " \nExecutou a mensagem : " + e.Message);
                return 0;
            }


        }
        public Logica.Funcionario  funcionarioByCodigo (int cod_funcinario)
        {
             try
            {
                Logica.Funcionario fun = new Logica.Funcionario( cod_funcinario);
                fun.pessoa = new Logica.Pessoa();
                fun.pessoa.nome = carregarNomeFuncionario(cod_funcinario);
                banco = new Banco();
                return fun;
            }
            catch (Exception e)
            {
                MessageBox.Show("A Classe Banco.MetodoBanco \nMetodo funcionarioByCodigo string [] \n : "
            + " \nExecutou a mensagem : " + e.Message);
                return null;
            }
           
        }
        public Logica.Pedido[] carregarPedidoByCliente(int codCliente)
        {
            
            try
            {
                string query = "select cod_pedido,cod_cliente,cod_funcionario,datapedido,valortotal from pedido where cod_cliente = '" + codCliente + "'";
                banco = new Banco();
                DataTable dtt = banco.executaQueryRetornaDataTable(query);
                Logica.Pedido[] pedido = new Logica.Pedido[dtt.Rows.Count];
                    for (int x =0; x<dtt.Rows.Count;x++){
                    pedido[x] = new Logica.Pedido();
                        pedido[x].cod_pedido = Convert.ToInt16(dtt.Rows[x].ItemArray.GetValue(0));
                        pedido[x].pessoa =  carregarPessoaByCodigo(codPessoaByCodCliente(Convert.ToInt16(dtt.Rows[x].ItemArray.GetValue(1)))); 
                        pedido[x].funcionario = funcionarioByCodigo(codPessoaByCodCliente(Convert.ToInt16(dtt.Rows[x].ItemArray.GetValue(2))));
                        pedido[x].dataPedido =  Convert.ToDateTime(dtt.Rows[x].ItemArray.GetValue(3));
                        pedido[x].valorTotal =  Convert.ToDouble(dtt.Rows[x].ItemArray.GetValue(4));
                        pedido[x].itens.AddRange (itensDoPedido(pedido[x].cod_pedido));
                    }


                return pedido;

            }
            catch (Exception e)
            {
                MessageBox.Show("A Classe Banco.MetodoBanco \nMetodo carregarPedidoByCliente string [] \n : "
              + " \nExecutou a mensagem : " + e.Message);
                return null;
            }
        }    
        public Logica.Pedido[] carregarPedidoByRevendedor(int codRevendedor)
        {

            try
            {
                string query = "select cod_pedido,cod_revendedor,cod_funcionario,datapedido,valortotal from pedido where cod_revendedor = '" + codRevendedor + "'";
                banco = new Banco();
                DataTable dtt = banco.executaQueryRetornaDataTable(query);
                Logica.Pedido[] pedido = new Logica.Pedido[dtt.Rows.Count];
                for (int x = 0; x < dtt.Rows.Count; x++)
                {
                    pedido[x] = new Logica.Pedido();
                    pedido[x].cod_pedido = Convert.ToInt16(dtt.Rows[x].ItemArray.GetValue(0));
                    pedido[x].pessoa = carregarPessoaByCodigo(codPessoaByCodRevendedor(Convert.ToInt16(dtt.Rows[x].ItemArray.GetValue(1))));
                    pedido[x].funcionario = funcionarioByCodigo(codPessoaByCodRevendedor(Convert.ToInt16(dtt.Rows[x].ItemArray.GetValue(2))));
                    pedido[x].dataPedido = Convert.ToDateTime(dtt.Rows[x].ItemArray.GetValue(3));
                    pedido[x].valorTotal = Convert.ToDouble(dtt.Rows[x].ItemArray.GetValue(4));
                    pedido[x].itens.AddRange(itensDoPedido(pedido[x].cod_pedido));
                }


                return pedido;

            }
            catch (Exception e)
            {
                MessageBox.Show("A Classe Banco.MetodoBanco \nMetodo carregarPedidoByRevendedor string [] \n : "
              + " \nExecutou a mensagem : " + e.Message);
                return null;
            }
        }
        public Logica.Pedido[] carregarPedidoByCodPedido(int codPedido)
        {
            try
            {
                string query = "select cod_pedido,cod_funcionario, "
                    +"(case cod_revendedor is not null when true then cod_revendedor else cod_cliente end) as Cliente"
                    + ",datapedido, valortotal, (cod_revendedor is  null) as iscliente from pedido where cod_pedido = '" + codPedido + "'";
                banco = new Banco();
                DataTable dtt = banco.executaQueryRetornaDataTable(query);
                Logica.Pedido[] pedido = new Logica.Pedido[dtt.Rows.Count];

                for (int x = 0; x < dtt.Rows.Count; x++)
                {
                    pedido[x] = new Logica.Pedido();
                    pedido[x].cod_pedido = Convert.ToInt16(dtt.Rows[x].ItemArray.GetValue(0));
                    pedido[x].funcionario = funcionarioByCodigo(Convert.ToInt16(dtt.Rows[x].ItemArray.GetValue(1)));
                    if (Convert.ToBoolean( dtt.Rows[x].ItemArray.GetValue(0)))
                        pedido[x].pessoa = carregarPessoaByCodigo(codPessoaByCodCliente(Convert.ToInt16(dtt.Rows[x].ItemArray.GetValue(2))));
                    else
                        pedido[x].pessoa = carregarPessoaByCodigo(codPessoaByCodRevendedor(Convert.ToInt16(dtt.Rows[x].ItemArray.GetValue(2))));
                   
                    pedido[x].dataPedido = Convert.ToDateTime(dtt.Rows[x].ItemArray.GetValue(3));
                    pedido[x].valorTotal = Convert.ToDouble(dtt.Rows[x].ItemArray.GetValue(4));
                    pedido[x].itens.AddRange(itensDoPedido(pedido[x].cod_pedido));
                }
                return pedido;

            }
            catch (Exception e)
            {
                MessageBox.Show("A Classe Banco.MetodoBanco \nMetodo PedidoByCodPedido string [] \n : "
              + " \nExecutou a mensagem : " + e.Message);
                return null;
            }
        }
        public DataTable MovimentoDoDia(string data)
        {
            try
            {
                banco = new Banco();
                string query = "select "
               +" v.cod_venda"
               +" , p.descricao"
               +" , (select nome from funcionario f inner join pessoa pp on (pp.cod_pessoa = f.cod_pessoa) where cod_funcionario = v.cod_funcionario) as vendedor"
               +" , (case v.cod_revendedor is not null when true then (select nome from pessoa pp inner join revendedor rr on rr.cod_pessoa = pp.cod_pessoa "
	           +"     where rr.cod_revendedor = v.cod_revendedor   ) "
	           +"     else (case v.cod_cliente is not null when true then "
	           +"     (select nome from pessoa pp inner join cliente rr on rr.cod_pessoa = pp.cod_pessoa where rr.cod_cliente = v.cod_cliente   ) "
               + "     	  else 'Não Identificado' end ) end ) as pessoa"
               +" , v.dataVenda"
               +" , v.horario"
               +" ,p.dataPagamento"
               +" ,(case p.ispago when true then 'Sim' else 'Não' end) as Quitado"
               + " , to_char( p.valorPagamento, '0000.000') as Valor "
               +" from venda v inner join pagamento p on (v.cod_venda = p.cod_venda)"
               +" where dataVenda = '"+data+"';";
                return banco.executaQueryRetornaDataTable(query);


            }
            catch (Exception e)
            {
                return new DataTable();
            }
        }
        public void AbastecerNovoByQuanditadeOriginal(int cod_produto, double quantidade, int cod_original)
        {
            try
            {
                banco = new Banco();
                string query = "select baixaestoque("+cod_original+","+quantidade.ToString().Replace(',','.')+", "+cod_produto+")";
                banco.executaQuerySemRetorno(query);

            }
            catch (Exception e)
            {
                MessageBox.Show("A Classe Banco.MetodoBanco \nMetodo AbastecerNovoByQuanditadeOriginal  : "
               + " \n" + "Executou a mensagem : " + e.Message);

            }
        }
        public int getNovoCodProdutoByOld(int cod_produto)
        {
            try
            {
                string query = "SELECT NOVOCODIGO('"+cod_produto+"')";
                banco = new Banco();
                DataTable dtt = banco.executaQueryRetornaDataTable(query);
                return Convert.ToInt16(dtt.Rows[0].ItemArray.GetValue(0));

            }
            catch (Exception e)
            {
                MessageBox.Show("A Classe Banco.MetodoBanco \nMetodo getNovoCodProdutoByOld  \n : "
              + " \nExecutou a mensagem : " + e.Message);
                return 0;
            }
        }
        public Gerencial_Fisio_Nutry.NotaInterna.Conjunto.itemInterno.NotaInterna getEntradaNota(int cod_entrada, double qtdNota)
        {
            Gerencial_Fisio_Nutry.NotaInterna.Conjunto.itemInterno.NotaInterna 
                nota = new NotaInterna.Conjunto.itemInterno.NotaInterna();

            string query = "select e.cod_produto,e.quantidadeEstoque, e.valorCompra, e.dataValidade " //3
                            + ",n.id, n.nnf, n.cuf, n.cnf, n.natop, n.indpag "//9
                            + ", n.mod, n.serie, n. demi, n.dsaient, n.tpnf "//14
                            + ", n.cmunfg, n.tpimp, n.tpemis, n.cdv, n.tpamb "//19
                            + ", n.finnfe, n.procemi, n.verproc, n.vbc, n.cicms "//24
                            + ",n.vbcst, n.vst, n.vprod, n.vfrete, n.vseg "//29
                            + ", n.vdesc, n.vii, n.vipi,n.vpis, n.vcofins , n.voutro "//35
                            + ",n.vnf, n.nfat, n.vorig, n.vliq, n.cod_fornecedor "//40
                            + "from entrada e inner join notaentrada n on (n.nnf = e.nnf) where e.cod_entrada = " + cod_entrada;
            banco = new Banco();
            DataTable dtt = banco.executaQueryRetornaDataTable(query);
            //preencher itens da nota
            #region nota preenchida
            nota.fornec     =  fornecedorDaNota( int.Parse( dtt.Rows[0].ItemArray.GetValue(40).ToString()));
            nota.cdv = int.Parse(dtt.Rows[0].ItemArray.GetValue(18).ToString());
            nota.cmunfg = (dtt.Rows[0].ItemArray.GetValue(15).ToString());
            nota.cnf = (dtt.Rows[0].ItemArray.GetValue(7).ToString());
            nota.cuf = int.Parse(dtt.Rows[0].ItemArray.GetValue(6).ToString());
            nota.datavalidade = Convert.ToDateTime(dtt.Rows[0].ItemArray.GetValue(3).ToString());
            nota.demi = Convert.ToDateTime (dtt.Rows[0].ItemArray.GetValue(12).ToString());
            nota.dsaient = Convert.ToDateTime(dtt.Rows[0].ItemArray.GetValue(13).ToString());
            nota.finnfe = int.Parse(dtt.Rows[0].ItemArray.GetValue(20).ToString());
            nota.id = (dtt.Rows[0].ItemArray.GetValue(4).ToString());
            nota.indpag =  int.Parse(dtt.Rows[0].ItemArray.GetValue(9).ToString());
            nota.mod = int.Parse(dtt.Rows[0].ItemArray.GetValue(10).ToString());
            nota.natop = (dtt.Rows[0].ItemArray.GetValue(8).ToString());
            nota.nfat = int.Parse(dtt.Rows[0].ItemArray.GetValue(37).ToString());
            nota.nnf = int.Parse(dtt.Rows[0].ItemArray.GetValue(5).ToString());
            nota.procemi = int.Parse(dtt.Rows[0].ItemArray.GetValue(21).ToString());
            nota.quantidadeNota = qtdNota;
            nota.serie = int.Parse(dtt.Rows[0].ItemArray.GetValue(11).ToString());
            nota.tpamb = int.Parse(dtt.Rows[0].ItemArray.GetValue(19).ToString());
            nota.tpemis = int.Parse(dtt.Rows[0].ItemArray.GetValue(17).ToString());
            nota.tpimp = int.Parse(dtt.Rows[0].ItemArray.GetValue(16).ToString());
            nota.tpnf = int.Parse(dtt.Rows[0].ItemArray.GetValue(14).ToString());
            nota.valorCompra = Convert.ToDouble(dtt.Rows[0].ItemArray.GetValue(2).ToString());
            nota.vBC = Convert.ToDouble(dtt.Rows[0].ItemArray.GetValue(23).ToString());
            nota.vBCST = Convert.ToDouble(dtt.Rows[0].ItemArray.GetValue(25).ToString());
            nota.vCOFINS = Convert.ToDouble(dtt.Rows[0].ItemArray.GetValue(34).ToString());
            nota.vDesc = Convert.ToDouble(dtt.Rows[0].ItemArray.GetValue(30).ToString());
            nota.verproc = (dtt.Rows[0].ItemArray.GetValue(21).ToString());
            nota.vFrete = Convert.ToDouble(dtt.Rows[0].ItemArray.GetValue(28).ToString());
            nota.vICMS = Convert.ToDouble(dtt.Rows[0].ItemArray.GetValue(24).ToString());
            nota.vII = Convert.ToDouble(dtt.Rows[0].ItemArray.GetValue(31).ToString());
            nota.vIPI = Convert.ToDouble(dtt.Rows[0].ItemArray.GetValue(32).ToString());
            nota.vliq = Convert.ToDouble(dtt.Rows[0].ItemArray.GetValue(39).ToString());
            nota.vNF = Convert.ToDouble(dtt.Rows[0].ItemArray.GetValue(36).ToString());
            nota.vorig = Convert.ToDouble(dtt.Rows[0].ItemArray.GetValue(38).ToString());
            nota.vOutro = Convert.ToDouble(dtt.Rows[0].ItemArray.GetValue(35).ToString());
            nota.vPIS = Convert.ToDouble(dtt.Rows[0].ItemArray.GetValue(33).ToString());
            nota.vProd = Convert.ToDouble(dtt.Rows[0].ItemArray.GetValue(27).ToString());
            nota.vSeg = Convert.ToDouble(dtt.Rows[0].ItemArray.GetValue(29).ToString());
            nota.vST = Convert.ToDouble(dtt.Rows[0].ItemArray.GetValue(26).ToString());
            #endregion
            return nota;

        }
        public Nota.FornecedorNota fornecedorDaNota(int cod_fornecedor)
        {
            Nota.FornecedorNota fornec = new Nota.FornecedorNota();
            string query = "select cnpj,ie,crt, razao_social, email, endereco, bairro, cidade"//7
                +", estado, cep, numero, telefone, datacadastro, fantasia,cMun,cPais,xPais from fornecedor where cod_fornecedor = "+cod_fornecedor;
            banco = new Banco();
           DataTable dtt =  banco.executaQueryRetornaDataTable(query);
           fornec.CNPJ = dtt.Rows[0].ItemArray.GetValue(0).ToString();
           fornec.IE = dtt.Rows[0].ItemArray.GetValue(1).ToString();
           fornec.CRT = int.Parse( dtt.Rows[0].ItemArray.GetValue(2).ToString());
           fornec.cod_fornecedor = cod_fornecedor;
           fornec.xFant = dtt.Rows[0].ItemArray.GetValue(13).ToString();
           fornec.xNome = dtt.Rows[0].ItemArray.GetValue(3).ToString();
           fornec.enderEmit1.UF = dtt.Rows[0].ItemArray.GetValue(8).ToString();
            fornec.enderEmit1.CEP = dtt.Rows[0].ItemArray.GetValue(9).ToString();
           fornec.enderEmit1.cMun = dtt.Rows[0].ItemArray.GetValue(14).ToString();
           fornec.enderEmit1.cPais = int.Parse( dtt.Rows[0].ItemArray.GetValue(15).ToString());
           fornec.enderEmit1.fone = dtt.Rows[0].ItemArray.GetValue(11).ToString();
           fornec.enderEmit1.nro = dtt.Rows[0].ItemArray.GetValue(10).ToString();
           
           fornec.enderEmit1.xBairro = dtt.Rows[0].ItemArray.GetValue(6).ToString();
           fornec.enderEmit1.xLgr = dtt.Rows[0].ItemArray.GetValue(5).ToString();
           fornec.enderEmit1.xMun = dtt.Rows[0].ItemArray.GetValue(7).ToString();
           fornec.enderEmit1.xPais = dtt.Rows[0].ItemArray.GetValue(16).ToString();

            return fornec;
        }
        public void cadastrarFornecedor(string cnpj, string razao_social, string email, string endereco, string bairro,
       string cidade, string estado, string cep, string numero
           , string telefone, DateTime datacadastro, string fantasia, string ie, int crt)
        {
            try
            {
                banco = new Banco();
                string query = "INSERT INTO fornecedor(cnpj, razao_social, email, endereco, bairro, "
                    + "cidade, estado, cep, numero, telefone, datacadastro, fantasia, ie, crt)" +
                    "    VALUES ('" + cnpj + "','" + razao_social + "','" + email + "','" + endereco + "', '" + bairro
                    + "','" + cidade + "','" + estado + "','" + cep + "','" + numero + "','" + telefone + "','"
                    + DateTime.Now.ToShortDateString() + "','" + fantasia + "','" + ie + "'," + crt + " )";

                banco.executaQuerySemRetorno(query);

            }
            catch (Exception e)
            {
                MessageBox.Show("A Classe Banco.MetodoBanco \nMetodo cadastrarFornecedor  : "
               + " \n" + "Executou a mensagem : " + e.Message);

            }
        }
        public void cadastrarFornecedor(string cnpj, string razao_social, string email,
            string endereco, string bairro,
     string cidade, string estado, string cep, string numero
         , string telefone, DateTime datacadastro, string fantasia, string ie, 
            int crt, string cMun, int cPais,string xPais)
        {
                banco = new Banco();
                string query = "INSERT INTO fornecedor(cnpj, razao_social, email, endereco, bairro, "
                    + "cidade, estado, cep, numero, telefone, datacadastro, fantasia, ie, crt, cMun, cPais)" +
                    "    VALUES ('" + cnpj + "','" + razao_social + "','" + email + "','" + endereco + "', '" + bairro
                    + "','" + cidade + "','" + estado + "','" + cep + "','" + numero + "','" + telefone + "','"
                    + DateTime.Now.ToShortDateString() + "','" + fantasia 
                    + "','" + ie + "'," + crt + ",'"+cMun+"',"+cPais+")";

                banco.executaQuerySemRetorno(query);

        }
        public int entradaDoProdutoNota(int cod_produto, int nnf){
            try
            {
                string query = "select e.cod_entrada from entrada e inner join notaentrada n on (n.nnf = e.nnf)"
                    + " where e.cod_produto = "+cod_produto+" and e.nnf = "+nnf;
                banco = new Banco();
                DataTable dtt = banco.executaQueryRetornaDataTable(query);
                return Convert.ToInt16(dtt.Rows[0].ItemArray.GetValue(0));

            }
            catch (Exception e)
            {
                MessageBox.Show("A Classe Banco.MetodoBanco \nMetodo entradaDoProdutoNota \n : "
              + " \nExecutou a mensagem : " + e.Message);
                return 0;
            }
        }
        public void baixaEstoqueNotaInterna(int cod_produto, int nnf, double quantidade)
        {
            try
            {
                banco = new Banco();
                string query = "update entrada set quantidadeestoque = quantidadeestoque - "+quantidade.ToString().Replace(',','.')
                    +" where cod_produto = "+cod_produto+" and nnf = "+nnf;
                banco.executaQuerySemRetorno(query);

            }
            catch (Exception e)
            {
                MessageBox.Show("A Classe Banco.MetodoBanco \nMetodo AbastecerNovoByQuanditadeOriginal  : "
               + " \n" + "Executou a mensagem : " + e.Message);

            }

        }

    }
        
}
